package com.evan.common.registry;

import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;

/**
 * @Description: 基础注册器接口
 * @Author liudeguang
 */
public interface Registry<K, V> {
    /**
     * 设置k，v
     *
     * @param k
     * @param mappingFunction
     * @return
     */
    V register(K k, Function<? super K, ? extends V> mappingFunction);


    /**
     * @param k
     * @param v
     * @return
     */
    V register(K k, V v);


    /***
     * 根据key获取对象
     * @param k
     * @return
     */
    V get(K k);


    /***
     * 遍历对象K,V
     * @param action
     */
    void forEach(BiConsumer<? super K, ? super V> action);


    /***
     *  遍历对象V
     * @param action
     */
    void forEach(Consumer<? super V> action);
}

